package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.BaseAttrInfo;
import com.atguigu.gmall.model.product.BaseAttrValue;
import com.atguigu.gmall.product.mapper.BaseAttrValueMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.atguigu.gmall.product.mapper.BaseAttrInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
@Service
public class BaseAttrInfoServiceImpl extends ServiceImpl<BaseAttrInfoMapper, BaseAttrInfo>
    implements BaseAttrInfoService{
    @Autowired
    private BaseAttrInfoMapper baseAttrInfoMapper;
    @Autowired
    private BaseAttrValueMapper baseAttrValueMapper;
    @Override
    public List<BaseAttrInfo> getBaseAttrInfo(Long categoryId1, Long categoryId2, Long categoryId3) {
        return baseAttrInfoMapper.selectByCategoryId(categoryId1,categoryId2,categoryId3);
    }
    //新增属性信息
    @Override
    public void saveBaseAttrInfo(BaseAttrInfo baseAttrInfo) {
        baseAttrInfoMapper.insert(baseAttrInfo);
        List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();
        for (BaseAttrValue baseAttrValue : attrValueList) {
            baseAttrValue.setAttrId(baseAttrInfo.getId());
            baseAttrValueMapper.insert(baseAttrValue);
        }

    }
    //更新属性信息
    @Transactional
    @Override
    public void updateBaseAttrInfo(BaseAttrInfo baseAttrInfo) {
        baseAttrInfoMapper.updateById(baseAttrInfo);

        List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();
        //先去拿到不用删除的id列表(有可能全删)
        ArrayList<Long> noDeleteIdList = new ArrayList<>();
        for (BaseAttrValue baseAttrValue : attrValueList) {
            noDeleteIdList.add(baseAttrValue.getId());
        }
        if (noDeleteIdList.isEmpty()){
            //全删
            baseAttrValueMapper.delete(new QueryWrapper<BaseAttrValue>().eq("attr_id", baseAttrInfo.getId()));
        }else {
            //携带了的id,不用删除
            //更新前先删除没有携带的id
            QueryWrapper<BaseAttrValue> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("attr_id", baseAttrInfo.getId());
            queryWrapper.notIn("id",noDeleteIdList);
            baseAttrValueMapper.delete(queryWrapper);
        }

        for (BaseAttrValue baseAttrValue : attrValueList) {
            //根据属性值id判断是否存在，存在则更新，不存在则新增
            if (baseAttrValue.getId()!=null){
                baseAttrValueMapper.updateById(baseAttrValue);
            }else {
                baseAttrValue.setAttrId(baseAttrInfo.getId());
                baseAttrValueMapper.insert(baseAttrValue);
            }
        }
    }

    //根据属性id查询属性值列表
    @Override
    public List<BaseAttrValue> getAttrValueList(Long attrId) {
        return baseAttrValueMapper.selectList(new QueryWrapper<BaseAttrValue>().eq("attr_id", attrId));
    }
    //没有携带属性id，新增属性值
    @Transactional
    @Override
    public void saveOrUpdateAttrInfo(BaseAttrInfo baseAttrInfo) {
        if (baseAttrInfo.getId()==null){
            saveBaseAttrInfo(baseAttrInfo);
        }else {
            updateBaseAttrInfo(baseAttrInfo);
        }
    }


}




